# Claude Code 协作镜像（单 agent 版，与 blackboard 协议适配）
#
# 构建（在仓库根目录执行，构建上下文为 claude code/ 目录）：
#   cd /mnt/e/Code/Go/awesomeProject/agent
#   DOCKER_BUILDKIT=0 docker build -f "claude code/Dockerfile" -t claude-coop "claude code/"
#
# 基础镜像用 node:22-alpine（自带 node 22 + npm，满足 Claude Code 的 Node 要求）。
# 在其上装系统工具（curl/wget/git/jq/openssl/ripgrep）和 python3 + 常用库，
# 再全局安装 @anthropic-ai/claude-code 和 MCP SDK，最后放入协作组件
#（blackboard MCP server / supervisor / prompts）。
#
# 与 pi-coop 的差异：
#   - 用 claude-code 替代 pi-coding-agent
#   - blackboard 工具从 pi extension 改为独立 MCP server（stdio 协议）
#   - 模型配置走 ANTHROPIC_* 环境变量（不是 pi provider 体系）

FROM node:22-alpine

# ---- 系统工具 + Python ----
# 先把 apk 源换成清华镜像并用 http（node:22-alpine 的 Alpine 3.24 用官方 CDN
# 拉 APKINDEX 会报 TLS: unspecified error，改 http 绕过；装上 ca-certificates 后
# TLS 即恢复正常）。之后 apk add 装系统工具 + python3。
RUN sed -i 's|https://dl-cdn.alpinelinux.org|http://mirrors.tuna.tsinghua.edu.cn|g' /etc/apk/repositories \
  && apk add --no-cache \
      bash ca-certificates git ripgrep \
      curl wget jq openssl file \
      python3 py3-pip

# ---- Python 常用库 ----
# 用清华 PyPI 镜像加速；--no-cache-dir 避免膨胀；--break-system-packages 放行 Alpine pip 全局安装。
RUN pip3 install --no-cache-dir --break-system-packages \
      -i https://pypi.tuna.tsinghua.edu.cn/simple \
      requests urllib3 certifi idna charset-normalizer \
      cryptography pyOpenSSL paramiko pyjwt \
      PyYAML beautifulsoup4 lxml \
      python-dotenv click tqdm \
      numpy pandas \
      httpx aiohttp websockets dnspython \
      psutil pillow

# ---- 全局安装 Claude Code ----
# 使用 npmmirror 镜像加速国内下载。
# @anthropic-ai/claude-code：提供 claude CLI（headless 模式入口）
RUN npm install -g \
      --registry=https://registry.npmmirror.com \
      @anthropic-ai/claude-code@latest

# ---- 协作组件 ----
# blackboard MCP server 放 /mcp，supervisor 与 prompts 放默认路径。
RUN mkdir -p /mcp /prompts /blackboard
COPY blackboard-server.mjs /mcp/blackboard-server.mjs
COPY mcp-servers.json /mcp-servers.json
COPY supervisor.sh /usr/local/bin/supervisor.sh
COPY AGENTS.md /prompts/AGENTS.md
COPY prompts /prompts
RUN chmod +x /usr/local/bin/supervisor.sh

# ---- MCP SDK 本地安装 ----
# ESM 模块解析要求依赖在脚本所在目录的 node_modules 内（全局安装的包不会被
# ESM import 解析到，NODE_PATH 也只对 CommonJS require 生效）。因此在 /mcp
# 目录本地安装 @modelcontextprotocol/sdk，让 blackboard-server.mjs 能 import 到。
RUN cd /mcp && npm init -y >/dev/null 2>&1 \
  && npm install \
      --registry=https://registry.npmmirror.com \
      @modelcontextprotocol/sdk@latest

# ---- 非 root 用户 ----
# node:22-alpine 自带 node 用户（uid 1000），直接复用，与 pi-coop 的 uid 1000 对齐，
# 便于 blackboard 挂载卷权限一致。
# 注意：--dangerously-skip-permissions 不能以 root 运行，必须用非 root 用户。
RUN chown -R node:node /mcp /prompts /blackboard /mcp-servers.json
USER node
WORKDIR /blackboard

ENTRYPOINT ["/usr/local/bin/supervisor.sh"]
